Skip to content

feat(shared): onboarding personas quick-start with tag pop animation#5939

Merged
davidercruz merged 2 commits into
mainfrom
davidercruz/onboarding-personas
May 13, 2026
Merged

feat(shared): onboarding personas quick-start with tag pop animation#5939
davidercruz merged 2 commits into
mainfrom
davidercruz/onboarding-personas

Conversation

@davidercruz
Copy link
Copy Markdown
Contributor

@davidercruz davidercruz commented Apr 29, 2026

Changes

Adds an A/B-gated persona picker (Frontend, Backend, AI/ML, DevOps, etc.) inside the onboarding tag step. Selecting a persona batch-follows ~10 curated tags via the existing useTagAndSource().onFollowTags path, and a small staggered pop animation runs across the matching tag chips so the selection reads as intentional.

  • PersonaSelector renders the API-backed persona list using existing Button chip primitives (Float / Primary+Cabbage) so visual style stays consistent with the tag picker
  • Multi-select up to 3 personas; the 4th persona pill goes disabled until one is deselected
  • Per-persona-tag fan-out for recommendations: each persona-tag fires its own recommendedTags request in parallel, results dedupe and cap at 8 visible
  • Soft pruning model: manual tag clicks always add fresh recommendations; the eviction sweep that fades out unselected recommendations only runs every 10th manual click
  • Curated baseline tags fade out once the user has manually picked REQUIRED_TAGS_THRESHOLD (5) individual tags; persona clicks don't count toward the threshold
  • New tag-pop keyframe + procedural spark burst lifted from the leaderboard crown-spark pattern
  • New tag-fade-out keyframe for the eviction animation; onAnimationEnd is routed by event.animationName so pop, spark, and fade-out events don't conflict
  • New onboardingPopBus module event bus lets TagElement react to persona clicks (and TagSelection react to recommend requests) without prop-drilling
  • Mobile auto-scroll: the first persona click smooth-scrolls to the top of the tag area so users can see their selection take effect
  • Headline copy override: when the persona flag is on, the headline shows "Tune your feed" with subtitle "Pick a role to start fast, then add tags you like." This currently overrides the funnel/modal-supplied headline in code; see "Pre-merge" below
  • Backend (onboardingPersonas query) is already shipped in daily-api

Pre-merge

Important

Update Freyja funnel JSON for the persona-experiment variant to set the EditTags step's headline parameter to "Tune your feed". Once Freyja serves the new copy, the in-code override in EditTag.tsx (search for the TODO: drop this override once Freyja's persona-experiment variant ships the new headline directly comment) can be removed.

Events

Type event_name value
New select onboarding persona target_type: 'persona', target_id: <persona id>, extra: { action: 'select' | 'deselect', tags_count, active_count }

Experiment

Yes — gated behind the new onboarding_personas GrowthBook flag (featureOnboardingPersonas, default false). Slack #experiments enrolment to be posted before merge.

Important

Please do not merge the PR until the experiment enrolment is approved.

Manual Testing

On those affected packages:

  • Sanity-checked the webapp onboarding flow
  • Sanity-check in extension
  • Sanity-check companion is unaffected

Did you test the modified components media queries?

  • MobileL (420px)
  • Tablet (656px)
  • Laptop (1020px)

Did you test on actual mobile devices?

  • iOS (Chrome and Safari)
  • Android

🤖 Generated with Claude Code

Preview domain

https://davidercruz-onboarding-personas.preview.app.daily.dev

@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 29, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
daily-webapp Ready Ready Preview May 13, 2026 9:48am
1 Skipped Deployment
Project Deployment Actions Updated (UTC)
storybook Ignored Ignored May 13, 2026 9:48am

Request Review

davidercruz and others added 2 commits May 13, 2026 10:44
Adds an A/B-gated persona picker inside the onboarding tag step,
plus a rework of how recommended tags accumulate, fade out, and
animate during onboarding.

Highlights:
- PersonaSelector renders the API-backed persona list using existing
  Button chip primitives so it matches the tag picker visually.
- Multi-select up to 3 personas; the 4th persona pill goes disabled
  until one is deselected.
- Per-persona-tag fan-out for recommendations: each persona-tag fires
  its own recommendedTags request in parallel, results dedupe and
  cap at 12 visible.
- Round-robin merge across the per-seed responses so every seed
  contributes before any one seed's later results pile in (fixes
  AI/ML personas where overlapping clusters were starving classical
  data-science suggestions).
- Manual tag clicks always fetch fresh recommendations and add them
  to the screen; the eviction sweep that fades unselected recos out
  only runs every 10th manual click.
- Curated baseline tags fade out once the user has manually picked
  REQUIRED_TAGS_THRESHOLD individual tags; persona clicks don't count
  toward the threshold.
- New tag-pop, tag-spark, and tag-fade-out Tailwind keyframes; a
  procedural spark burst lifted from the leaderboard crown-spark
  pattern decorates each pop.
- onAnimationEnd routed by event.animationName so pop, spark, and
  fade-out events don't conflict.
- onboardingPopBus module event bus lets TagElement react to persona
  clicks and TagSelection react to recommend requests without
  prop-drilling.
- Mobile auto-scroll: the first persona click smooth-scrolls to the
  top of the tag area.
- When the persona flag is on, the headline reads "Tune your feed"
  with subtitle "Pick a role to start fast, then add tags you like."
  This currently overrides the funnel/modal-supplied headline in
  code; a TODO marks it for removal once Freyja ships the new copy.
- useRecommendedTags hook centralises the mutation, slicing,
  splice-at-anchor, and prune logic. Tags currently selected by the
  user are never evicted, even if a new recommendation batch
  supersedes them.

Backend (onboardingPersonas query) is already shipped in daily-api.
Gated behind featureOnboardingPersonas (default false).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Users enrolled in featureOnboardingPersonas now automatically get the
recswipe-backed onboardingRecommendTags mutation as their recommender,
without needing to also be enrolled in featureOnboardingTagRecommender.

OR-ing the two flags inside TagSelection keeps the recommender choice
local to the component and avoids requiring ops to coordinate dual
enrolment in #experiments.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@davidercruz davidercruz force-pushed the davidercruz/onboarding-personas branch from 48fdc0e to 5e6a3e7 Compare May 13, 2026 09:44
@davidercruz davidercruz merged commit 7899e89 into main May 13, 2026
13 checks passed
@davidercruz davidercruz deleted the davidercruz/onboarding-personas branch May 13, 2026 09:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant